package com.cloud.util.jsTree;

import java.util.ArrayList;
import java.util.List;


/**
 * jsTree工具类
 * @author gaof
 * @date 2016年9月6日
 */
public final class JsTreeUtil {

	/**
	 * 获取jsTree数据
	 * @return
	 */
	public static JsTreeJson getJsTree(JsTreeJson jsTree, List<?> dataList, IObjectToJsTree objectToJsTree){
		
		if(objectToJsTree == null){
			return null;
		}
		
		List<Object> childList = getChildList(jsTree.getId(), dataList, objectToJsTree);
		
		//没有下级节点
		if(childList == null || childList.isEmpty()){
			return jsTree;
		}
		
		//有下级节点，清除下级节点，减少下次遍历次数
		dataList.removeAll(childList);
		
		//构建子节点
		List<JsTreeJson> childTree = new ArrayList<JsTreeJson>();
		for (Object item : childList) {
			JsTreeJson tree = objectToJsTree.objectToJsTree(item);
			childTree.add(tree);
		}
		jsTree.setChildren(childTree);
		
		//递归获取所有
		for(JsTreeJson treeItem : childTree){
			getJsTree(treeItem, dataList, objectToJsTree);
		}
		
		return jsTree;
	}
	
	/**
	 * 获取子节点
	 * @param id
	 * @param dataList
	 * @param objectToJsTree 
	 * @return
	 */
	private static List<Object> getChildList(String id, List<?> dataList, IObjectToJsTree objectToJsTree) {
		
		List<Object> ret = new ArrayList<Object>();
		
		for (Object item : dataList) {
			if(id.equals(objectToJsTree.getObjectPId(item))){
				ret.add(item);
			}
		}
		
		return ret;
	}

	/**
	 * Object类型转jsTree接口
	 * @author gaof
	 * @date 2016年9月6日
	 */
	public interface IObjectToJsTree{
		/**
		 * Object对象转JsTree类型
		 * @param obj
		 * @return
		 */
		public JsTreeJson objectToJsTree(Object obj);
		
		/**
		 * 获取Object类型父ID
		 * @param obj
		 * @return
		 */
		public String getObjectPId(Object obj);
	}
	
}
